﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="00.jquery-2.0.3.js"></script>
</head>
<body>
    <script type="text/javascript">


        //01.使用$.Deferred()方法构造
        var dfd = $.Deferred();

        //02.使用$.Deferred(fn)方法构造, fnc中的this指向构造出来的deferred对象
        var dfd = $.Deferred(function () {
            this.done(function () {
                console.log(1);
            });
        });

        //03.向三个队列中添加函数
        var myResolve = function () { console.log(2) };
        var myReject = function () { console.log(3) };
        var myNotify = function () { console.log(4) };
        dfd.done(myResolve).fail(myReject).progress(myNotify);

        //04.always:同时向reject和resolve队列中添加函数
        var myAlways = function () { console.log(5) };
        dfd.always(myAlways);

        //06.promise:在外部不能调用:resolve,reject,notify
        var promise = dfd.promise();
        // promise.resolve()       //不能这么调用

        //06.触发三个队列中的方法
        dfd.resolve().reject().notify();


        //06.综合测试
        (function () {
            //文件读取
            function read(path) {
                var dfd = $.Deferred();
                console.log("开始读取");
                setTimeout(function () {
                    console.log("结束读取");
                    dfd.resolve(path + '的内容');
                }, 3000);
                dfd.notify('处理中');
                return dfd;
            }

            //二个异步的队列都是once的类型，触发一次后就不能再次resolve reject
            //三个异步的队列都是monery类型，触发一次后再次添加就直接触发了。
            var dfd = read("test.html")
            .done(function (content) { console.log(content); })
            .fail(function () { console.log("出错！"); })
            .progress(function () { console.log("处理中！" + arguments[0]); });
            dfd.resolve('非法的触发');
        })();


    </script>
</body>
</html>
